
package Composite;

import Visiteur.Visiteur;
import java.io.*;
import java.util.*;
import projetjava.*;

public class Dossier extends Element{
    
    private ArrayList <Element> elementFils;
    
    public Dossier(String nom, Element pere,File fichierCourant){
        super(nom,pere,fichierCourant);
        this.elementFils=new ArrayList();
    }
    
    public void addElement(Element e){
        this.elementFils.add(e);
        this.setChanged();
        this.notifyObservers(e);
        this.clearChanged();
    }
    
    public void addElement(Element e,int index){
        this.elementFils.add(index,e);
        
    }
    
    public int indexOf(Element child){
        return this.elementFils.indexOf(child) ;
    }
    
    public void removeElement(Element e){
        this.elementFils.remove(e);
        this.setChanged();
        this.notifyObservers(e);
        this.clearChanged();
    }
    
    public Element getChild(int index){
        return this.elementFils.get(index);
        
    }
    
    public int getChildCount(){
        
        return this.elementFils.size();
    }
    
    public ArrayList getChildren(){
        
        return this.elementFils;
    }
    
    public Element getElementRecursif(String path, Element retour) {
        
        
        if(this.getFichierCourant()!=null && path.equals(this.getFichierCourant().getAbsolutePath())){
            
            retour=this;
        } else if(retour==null){
            Iterator i=this.elementFils.iterator();
            while(i.hasNext()){
                
                retour =((Element)i.next()).getElementRecursif(path,retour);
            }
        }
        return retour;
    }
    
       public void charger(){
        
        Iterator it = this.getChildren().iterator();
        while(it.hasNext()){
            
            Element suiv=(Element)it.next();
            this.setChanged();
            this.notifyObservers(suiv);
            if(suiv instanceof Dossier){
                
                ((Dossier)suiv).charger();
            }
        }
    }
       
           public void accept(Visiteur v) {
        
        v.visiteDossier(this);
        ArrayList temp = new ArrayList(this.elementFils);
        Iterator<Element> it = temp.iterator();
        while (it.hasNext()){
            
            Element suiv = it.next();
            suiv.accept(v);
        }
    }
}
